//输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字。
//
//
//
// 示例 1：
//
// 输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
//输出：[1,2,3,6,9,8,7,4,5]
//
//
// 示例 2：
//
// 输入：matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
//输出：[1,2,3,4,8,12,11,10,9,5,6,7]
//
//
//
//
// 限制：
//
//
// 0 <= matrix.length <= 100
// 0 <= matrix[i].length <= 100
//
//
// 注意：本题与主站 54 题相同：https://leetcode-cn.com/problems/spiral-matrix/
//
// Related Topics 数组 矩阵 模拟 👍 537 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function spiralOrder(matrix: number[][]): number[] {
    if (matrix.length === 0) return []
    let left = 0,right = matrix[0].length - 1,top = 0,bot = matrix.length - 1
    let res = []
    while (res.length < matrix[0].length * matrix.length) {
        for (let i = left; i <= right; i ++) {
            res.push(matrix[top][i])
            if (res.length === matrix.length * matrix[0].length) return res
        }
        top ++
        for (let i = top; i <= bot; i ++) {
            res.push(matrix[i][right])
            if (res.length === matrix.length * matrix[0].length) return res
        }
        right --
        for (let i = right; i >= left; i --) {
            res.push(matrix[bot][i])
            if (res.length === matrix.length * matrix[0].length) return res
        }
        bot --
        for (let i = bot; i >= top; i --) {
            res.push(matrix[i][left])
            if (res.length === matrix.length * matrix[0].length) return res
        }
        left ++
    }
};
//leetcode submit region end(Prohibit modification and deletion)
